Dependency Injection ব্যবহার করে Services Inject করা

Microsoft Technologies - ডট নেট কোর (Dot.Net Core) কন্ট্রোলার এবং একশন (Controllers and Actions) |
220
220

Dependency Injection (DI) একটি ডিজাইন প্যাটার্ন যা অ্যাপ্লিকেশনের বিভিন্ন অংশের মধ্যে ডিপেনডেন্সি বা নির্ভরশীলতা হ্যান্ডল করতে ব্যবহৃত হয়। এর মাধ্যমে, অ্যাপ্লিকেশন কম্পোনেন্টগুলোর মধ্যে স্বতন্ত্রতা বা loosely coupled সম্পর্ক স্থাপন করা যায়। DI এর মাধ্যমে আমরা একটি ক্লাসের মধ্যে নির্ভরশীল অবজেক্টগুলো সরাসরি তৈরি না করে, সেগুলো বাইরের কোনও সোর্স (যেমন DI কন্টেইনার) থেকে ইনজেক্ট করতে পারি।

DI এর মূল উদ্দেশ্য হল, কোডের রক্ষণাবেক্ষণ এবং টেস্টিংকে সহজ করা, কারণ এর মাধ্যমে কোডের বিভিন্ন অংশ একে অপরের সাথে কম যোগাযোগ রাখে।


ASP.NET Core-এ Dependency Injection ব্যবহার


ASP.NET Core DI কে প্রথম থেকেই বিল্ট-ইন সাপোর্ট প্রদান করে, তাই আপনাকে বাইরের কোনো লাইব্রেরি বা ফ্রেমওয়ার্ক ব্যবহার করার দরকার নেই। এটি অ্যাপ্লিকেশন স্টার্টআপে কনফিগার করা হয় এবং নির্দিষ্ট সার্ভিসের জন্য ডিপেনডেন্সি ইনজেকশন সেট করা হয়। DI সার্ভিসটি কনফিগার করার জন্য অ্যাপ্লিকেশন এর Startup.cs ফাইলে সেটআপ করা হয়।

ASP.NET Core অ্যাপ্লিকেশন তৈরি করার সময় DI কনটেইনারটি একটি সার্ভিস রেজিস্ট্রেশন পদ্ধতি প্রদান করে, যেখানে আপনি বিভিন্ন সার্ভিস (যেমন ট্রান্সিয়েন্ট, সিঙ্গলটন, স্কোপড) রেজিস্টার করতে পারেন। এগুলি পরবর্তীতে ইনজেক্ট হয়ে চলতে থাকে।


DI কনফিগারেশন এবং সার্ভিস ইনজেকশন


সার্ভিস রেজিস্ট্রেশন
Startup.cs ফাইলে ConfigureServices মেথডে সার্ভিস রেজিস্টার করা হয়। এখানে আপনি সার্ভিসগুলিকে বিভিন্ন লাইফটাইম (Transients, Scoped, Singleton) এর মধ্যে রেজিস্টার করতে পারেন।

  1. Transients: প্রতি রিকোয়েস্টে নতুন অবজেক্ট তৈরি হয়।
  2. Scoped: রিকোয়েস্টের লাইফটাইমের মধ্যে একবার অবজেক্ট তৈরি হয়।
  3. Singleton: অ্যাপ্লিকেশন চলাকালীন একবার অবজেক্ট তৈরি হয়।

Service Registration উদাহরণ:

public void ConfigureServices(IServiceCollection services)
{
    // Singleton সার্ভিস রেজিস্ট্রেশন
    services.AddSingleton<IMyService, MyService>();

    // Scoped সার্ভিস রেজিস্ট্রেশন
    services.AddScoped<IOrderService, OrderService>();

    // Transient সার্ভিস রেজিস্ট্রেশন
    services.AddTransient<IProductService, ProductService>();
}

এখানে IMyService একটি ইন্টারফেস এবং MyService তার ইমপ্লিমেন্টেশন। AddSingleton, AddScoped, AddTransient মেথডগুলো সার্ভিসের বিভিন্ন লাইফটাইম রেজিস্টার করতে ব্যবহৃত হয়।


সার্ভিস ইনজেকশন

একবার সার্ভিস রেজিস্টার করার পর, ASP.NET Core আপনাকে স্বয়ংক্রিয়ভাবে সেগুলো ইনজেক্ট করতে সাহায্য করে। সার্ভিস ইনজেক্ট করার জন্য, কনট্রোলার বা ক্লাসের কনস্ট্রাকটরে সরাসরি সার্ভিসটি ইনজেক্ট করা হয়।

কনট্রোলারে সার্ভিস ইনজেকশন উদাহরণ:

public class HomeController : Controller
{
    private readonly IMyService _myService;

    // কনস্ট্রাকটরে DI ব্যবহার
    public HomeController(IMyService myService)
    {
        _myService = myService;
    }

    public IActionResult Index()
    {
        var result = _myService.GetData();
        return View(result);
    }
}

এখানে HomeController-এ IMyService ইন্টারফেস ইনজেক্ট করা হচ্ছে। ASP.NET Core এটি অটোমেটিক্যালি ইনজেক্ট করবে, কারণ এটি সার্ভিস রেজিস্টার করা হয়েছে ConfigureServices মেথডে।


সার্ভিস ইনজেকশনের ধাপ

  1. সার্ভিস রেজিস্টার করুন: প্রথমে ConfigureServices মেথডে সার্ভিস রেজিস্টার করতে হবে। সার্ভিসগুলোকে ট্রান্সিয়েন্ট, স্কোপড, অথবা সিঙ্গলটন হিসেবে কনফিগার করা হয়।
  2. কনট্রোলার বা ক্লাসে ইনজেক্ট করুন: এরপর সেই সার্ভিসটি কনস্ট্রাকটরের মাধ্যমে কনট্রোলার বা ক্লাসে ইনজেক্ট করা হয়।
  3. সার্ভিস ব্যবহার করুন: ইনজেক্ট করা সার্ভিসের মেথডগুলো ব্যবহার করা হয় প্রয়োজন অনুযায়ী।

Dependency Injection-এর সুবিধা

  • লোস কপ্লিং: DI কোডের মধ্যে কম্পোনেন্টগুলোর মধ্যে নির্ভরশীলতা কমায়, ফলে কোড সহজে রক্ষণাবেক্ষণযোগ্য হয়।
  • টেস্টেবিলিটি: DI সহজে ইউনিট টেস্টিংকে সমর্থন করে, কারণ আপনি মক (mock) বা ফেইক (fake) সার্ভিস ইনজেক্ট করতে পারেন।
  • স্কেলেবিলিটি: বিভিন্ন সার্ভিসের জন্য নির্দিষ্ট লাইফটাইম ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনটি আরও স্কেলেবল হয়।
  • বেস্ট প্র্যাকটিস: সার্ভিস ইনজেকশন ব্যবহার করলে কোডকে আরও পরিষ্কার, এবং ভাল প্র্যাকটিস অনুসরণ করা হয়।

সার্ভিস ইনজেকশন এর উদাহরণ

ধরা যাক, আমাদের একটি সার্ভিস আছে যা ব্যবহারকারীর তথ্য রিট্রিভ করার জন্য ব্যবহৃত হয়।

  1. ইন্টারফেস তৈরি করা:
public interface IUserService
{
    User GetUser(int id);
}
  1. ইমপ্লিমেন্টেশন তৈরি করা:
public class UserService : IUserService
{
    public User GetUser(int id)
    {
        // এখানে ডেটাবেস বা অন্য কোনো সোর্স থেকে ডেটা রিটার্ন করা হবে
        return new User { Id = id, Name = "John Doe" };
    }
}
  1. সার্ভিস রেজিস্টার করা:
public void ConfigureServices(IServiceCollection services)
{
    services.AddScoped<IUserService, UserService>();
}
  1. কনট্রোলারে সার্ভিস ইনজেক্ট করা:
public class UserController : Controller
{
    private readonly IUserService _userService;

    public UserController(IUserService userService)
    {
        _userService = userService;
    }

    public IActionResult Index(int id)
    {
        var user = _userService.GetUser(id);
        return View(user);
    }
}

এখানে, IUserService ইন্টারফেসটি UserService ক্লাসের মাধ্যমে বাস্তবায়িত হয়েছে, এবং কনট্রোলারে ইনজেক্ট করা হয়েছে।


সারাংশ
Dependency Injection (DI) ASP.NET Core অ্যাপ্লিকেশনগুলিতে নির্ভরশীলতা ম্যানেজমেন্টের একটি শক্তিশালী টুল। এটি কোডের ক্লিনলিনেস, রক্ষণাবেক্ষণ সহজতা, এবং টেস্টিং সহজ করে তোলে। ASP.NET Core DI সিস্টেম স্বয়ংক্রিয়ভাবে সার্ভিস ইনজেকশন পরিচালনা করে, যা কোডে মডুলারিটি ও স্কেলেবিলিটি আনে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion